#define declare(a,t)    name(a,declare)(t) 
#define name(a,b)       a##b

#define POOL_MANAGE_MEMORY(typ) \
    friend class MemPoolMember<typ>; \
    static MemPool<typ> thePool;  \
    void* operator new (size_t ) \
        {   return thePool.allocate();  } \
    void operator delete (void *p) \
        {   thePool.deallocate ((typ *)p);  }


